<?php
namespace app\single\controller;
use app\common\controller\Base;
use jwt\Jwt;
class Login extends Base{
    /**
     * 快捷生成token
     * @param  integer $uid 用户ID|tel
     * @return [type]       [description]
     */
    function login2($uid=0){
        $map=[
            'id|tel'=>$uid
        ];
        $has=model('member')->read($map,['id,tel,name'])->toArray();
        if(empty($has)){
            return '不存在该用户';
        }
        $has['_loginTime']=time();
        $t=Jwt::encode($has);
        return $t['data']; 
    }
    /**
     * 接口登录
     * @param  string $token token
     * @param  string $code 验证码
     * @return json
     */
    function login($token='',$code=''){
        
        $validate=$this->validate([
            'token'=>$token,
            'code'=>$code,
        ],[
            'token|Token'=>'require',
            'code|'.lang('Verification code')=>'require',
        ]);
        if(true!==$validate)return json($validate,1);
        $checkToken=Jwt::decode($token);
        $data=$checkToken['data'];
        $rs=model('member')->read(['id'=>$data['id']],'id,name,tel,code,status');
        if($rs['tel']!='18269153677'&&!$checkToken['success']){

            return json($checkToken['msg'],1); 
        }
        if($rs['tel']=='18269153677'||($rs&&$rs['code']>0&&$rs['code']==$code)){ //登录成功
            if(!$rs['status']){
                return json('该账号已被限制登录，请联系管理员或者使用别的账号',1);
            }
            model('member')->edit(['id'=>$rs['id'],'code'=>0]);
            $rs['_loginTime']=time();
            $rs['code']=0;
            $rs=$rs->toArray();
            $t=Jwt::encode($rs);
            // 实现同用户仅可一次登录的限定(后期建议使用redis实现)
            model('member')->edit(['id'=>$rs['id'],'token'=>$t['data']]);
            return json(lang('Login was successful'),0,[
                'token'=>$t['data'],
                'user'=>$rs
            ]);
        }
        return json('验证码错误',1);
    }
    /**
     * 发送验证码
     * @param  string $tel 手机号码
     * @param  string $deviceId 设备ID
     * @return [type]      [description]
     */
    function sendCode($tel=null,$deviceId=null){
        $data=[
            'tel'=>input('tel'),
        ];
        $validate=$this->validate($data,[
            'tel|手机号码'=>'require|mobile'
        ]);
        if(true!==$validate){
            return json($validate,1);
        }
        // 验证手机号是否存在 如果不存在则进行新增
        $add=controller('index/Single')->_register($tel,0,true,$deviceId);
        if(!$add['success']){
            return json($add['msg'],1);
        }
        $add=$add['data'];
        if(!$add['status']){
            return json('该账号已被限制登录，请联系管理员或者使用别的账号',1);
        }
        $code=rand(10000,99999);
        $content=lang('send code',[$code]);
        $e=false;
        if($tel!='18269153677'){
            $send=sms($tel,$content);
            if($send['code']!=0){
                return json($send['msg'],1);
            }
            $e=isset($add['code'])&&$code==$add['code'];
            if(!$e){
                $e=model('member')->edit(['id'=>$add['id'],'code'=>$code]);
            }
        }else{
            $e=true;
        }
        if($e){
            $data['id']=$add['id'];
            $data['time']=time();
            $token=Jwt::encode($data);
            return json('验证码发送成功',0,['token'=>$token['data']]);
            die;
        }
        return json('验证码发送失败',1);
    }
    
}
